// 获得数据库对象
const { User } = require('../database/index')
const fs = require('fs')
const { promisify } = require('util')
const rename = promisify(fs.rename)
// 引入生成jwt token函数
const {createToken} = require('.././utils/jwt')
exports.list = async (req, res) => {
    console.log(req.headers.authorization);
    res.send('/user-list')
}
exports.delete = async (req, res) => {

    console.log('删除');
}
exports.register = async (req,res) => {
    console.log(req.body);
    // 创建数据库模型
    const userModel = new User(req.body)
    // 保存数据
    const dbBack = await userModel.save()
    // RESTful API要求 返回均为JSON
    user = dbBack.toJSON()
    // 在validator中设置password不显示 但此处是save方法，仍会返回password
    // 删除password 不返回给前端
    delete user.password
    res.status(201).json({
        user
    })
}
exports.login = async (req,res)=>{
    // 获得客户端传来的数据
    var dbBack = await User.findOne(req.body)

    // dbBack无内容 则返回
    if(!dbBack){
        res.status(402).json({error:'邮箱或密码错误'})
    } 
    dbBack = dbBack.toJSON()
    // creteToken被封装成异步方法 需要加上await
    dbBack.token = await createToken(dbBack)
    // 返回数据
    res.status(200).json({msg:dbBack})
}
exports.change = async (req,res) => {
    // 根据jwt 中获得的用户数据库中的id可以找到该数据，将其安装请求
    // 传入的字段进行修改
    const id = req.user.data._id
    // 返回的数据是修改前的数据 加入param3 返回修改后的数据
    var updateData = await User.findByIdAndUpdate(id,req.body,{new:true})
    res.status(202).json({user:updateData})
    // User.findByIdAndUpdate(req.user)
} 
exports.headImg = async (req,res) => {
    // res.send(req.file)
    var fileNameArray = req.file.originalname.split('.')
    const fileType = fileNameArray[fileNameArray.length - 1]
    const originalname = './public/' + req.file.filename
    const newName = originalname + '.' + fileType
    try {
        // rename会把node_modules作为根目录
        await rename(originalname,newName)
        res.status(201).json({msg:newName})
    } catch (error) {
        res.status(500).json({err:error})
    }
    
    // res.status(201).json({msg: '成功'})
}